/***************************************************************************
创建者：华磊
开始时间：               : 2020.1１.1
copyright            : (C) 深圳市华友高科有限公司
修改说明：

修改人:华磊
修改时间:2020.11.29
修改内容:触发信号,补充port,hmi ip

 ***************************************************************************
 *   用户登录对话框
*                                                                         *
 ***************************************************************************/

#ifndef LOGIN_H
#define LOGIN_H

#include <QDialog>
#include "login_global.h"
#include "loginstatus.h"
#include "ipsetdialog.h"
#include "loginstatus_global.h"
#include <QTranslator>

#include "../CommunicateDelegate/hmicommunicate.h"


namespace Ui {
class Login;
}

/**
 * @brief The Login class
 */
class  Login : public QDialog
{

    Q_OBJECT

public:
    explicit Login(int styleId,GlobalData *globalDataIn, QWidget *parent = 0);
    ~Login(); 

public:
    void show_dialog();

    /**
     * @brief updateShow            更新窗口显示
     */
    void updateShow();
    /**
     * @brief getViewInput          获取窗口输入
     */
    void getViewInput();

    /**
     * @brief initSetIPFromIni      delegate读取INI文件后获取控制器的IP与端口
     */
    void initSetIPFromIni(QString ctrlIp, QString ctrlPort,QString hmiIp, QString hmiPort);
    /**
     * @brief initSetIPFromIni      delegate读取INI文件后获取的登录的记录
     */
    void initLoginFromIni(int account, QString password, int lang, int editLang, QString version);

    /**
     * @brief setShowInitialLanguage　设置HMI启动时语言显示
     */
    void setShowInitialLanguage();

public:
    LoginStatus *loginStatus;
    IpSetDialog *ipSetDialog;

public:
    /**
     * @brief controllerIpAddress   控制器ＩＰ地址
     */
    QVector<int> controllerIpAddress;
    /**
     * @brief hmiIpAddress          示教器IP地址
     */
    QVector<int> hmiIpAddress;
    /**
     * @brief passwardString        密码字符串
     */
    QString passwardString;
    /**
     * @brief port                  通信端口号
     */
    int port;
    /**
     * @brief selectedAccount       选择用户账户
     */
    int selectedAccount;
    /**
     * @brief selectedLanguage      选择语言
     */
    int selectedLanguage;
    int editLanguage;


    /**
     * @brief himProgramVersion     示教器程序版本
     * @return
     */
    QString hmiProgramVersion;

    /**
     * @brief isEditing             判断文本框是否正在编辑
     */
    bool isEditing;

    /**
     * @brief haveEdited            记录是否有被修改过:若有:证明IP已经变动,文件需要重新清除
     *                              这是为了应对切换角色
     */
    bool haveEdited;
private:
    void initialDisplayStyle(int styleId);

private:
    QTranslator translator;

 signals:
    /**
     * @brief controllerLoginSignal 控制器登录信号函数
     * @param controllerIpAddress   控制器IP地址
     * @param passwardString        密码字符串
     * @param selectedAccount       选择用户账户
     */
    void controllerLoginSignal(QVector<int> controllerIpAddress,QVector<int> hmiIpAddress,QString port,QString passwardString,int selectedAccount);
    /**
     * @brief controllerLanguageChangedSignal控制器语言选择信号函数
     * @param selectedLanguage      当前选择语言
     */
    void controllerLanguageChangedSignal(int selectedLanguage);
    /**
     * @brief hmiIpSettingSignal    示教器ip设置信号函数
     */
    void hmiIpSettingSignal();

public slots:
    /**
     * @brief on_LoginBtn_clicked   登录按钮单击响应槽函数
     */
    void on_LoginBtn_clicked();


private slots:
    /**
     * @brief on_GuestBtn_clicked   操作员按钮单击响应槽函数
     */
    void on_GuestBtn_clicked();
    /**
     * @brief on_AdminBtn_clicked   管理员按钮单击响应槽函数
     */
    void on_AdminBtn_clicked();
    /**
     * @brief on_LoginAlertHmiIp_clicked示教器ＩＰ设置控件响应槽函数
     */
    void on_LoginAlertHmiIp_clicked();

    void on_lineEdit_ip4_editingFinished();

    void on_lineEdit_ip3_editingFinished();

    void on_lineEdit_ip2_editingFinished();

    void on_lineEdit_ip1_editingFinished();

    void on_lineEdit_ip4_cursorPositionChanged(int arg1, int arg2);

    void on_lineEdit_ip3_cursorPositionChanged(int arg1, int arg2);

    void on_lineEdit_ip2_cursorPositionChanged(int arg1, int arg2);

    void on_lineEdit_ip1_cursorPositionChanged(int arg1, int arg2);

    /**
     * @brief on_comboBox_activated 当前语言下拉框控件选择变更响应槽函数
     * @param index
     */
    void on_comboBox_activated(int index);

    void on_lineEdit_ip1_textEdited(const QString &arg1);

    void on_lineEdit_ip2_textEdited(const QString &arg1);

    void on_lineEdit_ip3_textEdited(const QString &arg1);

    void on_lineEdit_ip4_textEdited(const QString &arg1);

private:
    Ui::Login *ui;
};

#endif // LOGIN_H
